3.6.9.2 dmfma-倍精度行列ベクトル積和演算の基本動作
行列レジスタから読み出した 4 行 4 列のブロックフロート倍精度行列データのうち、後述する指定に応じて0,1行目あるいは2,3行目を抽出した 2 行 4 列の行列が使用される。 code:文法
dmfma(u|d) $l(x|y) <src_x> <src_y> <dst_0> <dst_1>.. (u|d)は 4 行 4 列のうち上半分・下半分どちらの 2 行 4 列を演算に使用するかを指定するために用いられる。
uを指定した場合はAの0,1行目をxと掛け合わせたものをAxの0,1要素目とし、Axの2,3要素目を 0 としてyとの加算を行う(以下効果においてoffset=0)。
dを指定した場合はAの2,3行目をxと掛け合わせたものをAxの2,3要素目とし、Axの0,1要素目を 0 としてyとの加算を行う(以下効果においてoffset=2)。
第 1 入力の$l(x|y)は読み出し元の行列レジスタであり、以下効果においてsideとして参照する。 第 2 入力の<src_x>および第 3 入力の<src_y>は読み出し元PEオペランドである。 <dst_0> [<dst_1>..]は書き込み先PEオペランドである。 演算結果は複数のPEメモリに同時に書き込むことができるが、以下効果では簡単のため単一の書き込み先としてdstを指定した例を示している。 code:効果.py
for cycle = 0:4
forall chip,l2b,l1b,mab
LongWord dst_data4 = {0, 0, 0, 0} for i = 0:2
for j = 0:4
for i = 0:4